package com.dhwl.hsh.driver.view;

import android.content.Context;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.dhwl.hsh.driver.R;


/**
 * 加减控件，中间为编辑框
 * @author Derek.Kidd
 * @time 2016/4/26 13:48
 */
public class AddSubtracterEditView extends RelativeLayout
{
    private Context mContext;
    
    /**
     * 加号
     */
    private Button btnAdd;
    
    /**
     * 减号
     */
    private Button btnSubtract;
    
    /**
     * 编辑框
     */
    private EditText editNumber;
    
    /**
     * 个数
     */
    private int number = 0;
    
    /**
     * 可输入的最大数 9999999
     */
    private int maxNumber = 999;
    
    public AddSubtracterEditView(Context context)
    {
        this(context, null);
    }
    
    public AddSubtracterEditView(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }
    
    /** 
     * AttributeSet：将自定义控件类中变量与attrs.xml中的属性连接起来。
     * defStyle：指定view的默认style的，如果是0，那么将不会应用任何默认（或者叫缺省）的style。
     * 另外这个参数可以是一个属性指定的style引用，也可以直接是一个显式的style资源。
     */
    public AddSubtracterEditView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        this.mContext = context;
        setWillNotDraw(false);
        initView();
    }
    
    /** 
     * 初始化试图
     * @see [类、类#方法、类#成员]
     */
    private void initView()
    {
        LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.layout_edit_addsub, this);

        btnAdd = (Button)findViewById(R.id.btn_add);
        btnSubtract = (Button)findViewById(R.id.btn_subtract);
        editNumber = (EditText)findViewById(R.id.edit_number);
        editNumber.setText(String.valueOf(number));
        
        btnAdd.setOnClickListener(new OnButtonClickListener());
        btnSubtract.setOnClickListener(new OnButtonClickListener());
        editNumber.addTextChangedListener(new OnTextChangeListener());
        editNumber.setOnFocusChangeListener(new OnEditTextFocusChangeListener());
    }
    
    /**
     * 设置editText中的值(1->Int.MAX)
     * @param num
     */
    public void setNum(int num)
    {
        if (num >= 0)
        {
            editNumber.setText(String.valueOf(num));
            number = num;
        }
        else
        {
            editNumber.setText(String.valueOf(0));
            number = 0;
        }
    }
    
    /**
     * 获取editText中的值
     * @return
     */
    public int getNum()
    {
        return number;
    }
    
    /**
     * 加减按钮事件监听器
     * 
     * @author  hjd008
     * @version  [版本号, 2015-1-9]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    private class OnButtonClickListener implements OnClickListener
    {
        
        @Override
        public void onClick(View v)
        {
            String numString = editNumber.getText().toString();
            if (TextUtils.isEmpty(numString) || number <= 0)
            {
                setNum(0);
            }
            if (v.getId() == R.id.btn_add)
            {//点击加号
                if (number >= maxNumber)
                {
                    //toast
                    return;
                }
                setNum(++number);
            }
            else if (v.getId() == R.id.btn_subtract)
            {//点击减号
                if (number <= 0)
                {
                    //toast
                    return;
                }
                setNum(--number);
            }
        }
    }
    
    /**
     * EditText输入内容变化事件监听器
     * 
     * @author  hjd008
     * @version  [版本号, 2015-1-9]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    private class OnTextChangeListener implements TextWatcher
    {
        @Override
        public void afterTextChanged(Editable s)
        {
            String numString = s.toString();
            if (!TextUtils.isEmpty(numString))
            {
                int numInt = Integer.parseInt(numString);
                if (numInt >= 1 && numInt != number)
                {
                    number = numInt >= maxNumber ? maxNumber : numInt;
                    setNum(number);
                    //设置EditText光标位置 为文本末端
                    editNumber.setSelection(editNumber.getText().toString().length());
                }
            }
        }
        
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {
            
        }
        
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            
        }
        
    }
    
    /**
     * EditText焦点变化事件监听器
     * 
     * @author  hjd008
     * @version  [版本号, 2015-1-9]
     * @see  [相关类/方法]
     * @since  [产品/模块版本]
     */
    private class OnEditTextFocusChangeListener implements OnFocusChangeListener
    {
        
        @Override
        public void onFocusChange(View v, boolean hasFocus)
        {
            if (!hasFocus)
            {
                String numString = editNumber.getText().toString();
                if (TextUtils.isEmpty(numString) || TextUtils.equals(numString, "0"))
                {
                    setNum(0);
                }
            }
        }
        
    }
    
    public int getMaxNumber()
    {
        return maxNumber;
    }
    
    public void setMaxNumber(int maxNumber)
    {
        this.maxNumber = maxNumber;
    }
}
